#include"comm.h"
#include<string.h>
//服务端:创建管道->以读取的方式打开管道->进行业务处理->最后要记得关闭文件描述符
int main()
{
    //指定权限,创建命名管道
    umask(0);//清空权限掩码
    if(mkfifo(MY_FIFO,0666) < 0)
    {
        perror("mkfifo:");
        exit(1);
    }
    int fd = open(MY_FIFO,O_RDONLY);//以读方式命名管道
    if(fd<0)
    {
        perror("open:");
        exit(2);
    }
    //业务处理
    while(1)
    {
        char buffer[64] = {0};
        memset(buffer,0,sizeof(buffer));
        //从命名管道中读取
        ssize_t n = read(fd,buffer,sizeof(buffer)-1);
        if(n > 0)
        {
            buffer[n] = '\0';
            //如果client发送的信息是"show-ls-l" ：就执行ls -l命令
            //如果client发送的信息是"show-train" ：就执行sl命令
            //否则正常打印client发送的内容
            if(strcmp(buffer,"show-ls-l") == 0)
            {
               if(fork() == 0)
               {
                execl("/usr/bin/ls","ls","-l",NULL);
                exit(2);
               }
               waitpid(-1,NULL,0);
            }
            else if(strcmp(buffer,"show-pwd") == 0)
            {
               if(fork() == 0)
               {
                execl("/usr/bin/pwd","pwd",NULL);
                exit(2);
               }
               waitpid(-1,NULL,0);
            }
            else
                printf("recevie:%s\n",buffer);
        }
        else if(n == 0)
        {
            printf("client close....\n");
            break;
        }
        else // n < 0
        {
            perror("read:");
            break;
        }
    }
    close(fd);//注意:最后要关闭fd！！！
    return 0;
}